/* Copyright (c) 2016-2020 Enfry Ltd. All Rights Reserved.
 * 
 * This software is the confidential and proprietary information of Enfry. 
 * You shall not disclose such Confidential Information
 * and shall use it only in accordance with the terms of the agreements
 * you entered into with Enfry.
 */
package com.enfry.common.util.asserts;

import com.enfry.common.util.thread.Threads;
import com.enfry.common.util.validate.Validates;


/**
 * 
 * <请简单说明此类用途>
 * 
 * @Title com.enfry.util.Asserts
 * @author Penghu
 * @date 2017年3月2日
 */
public class Asserts {
	/*****************************************************************************/
	// 断言， 判断结果=false时抛出IllegalArgumentException
	/*****************************************************************************/

	/**
	 * 断言，传入要断言的判断，为false时抛出非法的参数异常
	 * 
	 * @param param 断言为false时抛出非法的参数异常
	 * @param exception 异常信息
	 */
	public static void asserts(boolean param, String exception) {
		if (!param) {
			throw new IllegalArgumentException(Threads.getInvokerAbbr() + exception);
		}
	}

	/**
	 * 断言，传入要断言的判断，为false时抛出非法的状态异常
	 * 
	 * @param param 断言为false时抛出非法的参数异常
	 * @param exception 异常信息
	 */
	public static void assertState(boolean param, String exception) {
		if (!param) {
			throw new IllegalStateException(Threads.getInvokerAbbr() + exception);
		}
	}

	/**
	 * 断言对象不为null，如果为null则抛出非法的参数异常
	 * 
	 * @param param 参数
	 * @param exception 异常信息
	 */
	public static void assertNotNull(Object param, String exception) {
		if (param == null) {
			throw new IllegalArgumentException(Threads.getInvokerAbbr() + exception);
		}
	}

	/**
	 * 断言字符串不为空，如果为空则抛出非法的参数异常
	 * 
	 * @param param 参数
	 * @param exception 异常信息
	 */
	public static void assertNotEmpty(String param, String exception) {
		if (Validates.isEmpty(param)) {
			throw new IllegalArgumentException(Threads.getInvokerAbbr() + exception);
		}
	}

	/**
	 * 断言字符串不为空白，如果为空白则抛出非法的参数异常
	 * 
	 * @param param 参数
	 * @param exception 异常信息
	 */
	public static void assertNotEmptyBlank(String param, String exception) {
		if (Validates.isEmptyBlank(param)) {
			throw new IllegalArgumentException(Threads.getInvokerAbbr() + exception);
		}
	}

	/**
	 * 断言字符串是整型，支持前缀+-，如果不是整型则抛出非法的参数异常
	 * 
	 * @param param 参数
	 * @param exception 异常信息
	 */
	public static void assertInteger(String param, String exception) {
		if (!Validates.isInteger(param)) {
			throw new IllegalArgumentException(Threads.getInvokerAbbr() + exception);
		}
	}

	/*****************************************************************************/
	// 返回断言异常，IllegalArgumentException
	/*****************************************************************************/

	/**
	 * 断言，直接抛出异常，信息会在原信息上加上类和方法名
	 * 
	 * @param message 异常信息
	 * @return IllegalArgumentException
	 */
	public static IllegalArgumentException exception(String message) {
		return new IllegalArgumentException(Threads.getInvokerAbbr() + message);
	}

	/**
	 * 断言，直接抛出异常，信息会在原信息上加上类和方法名
	 * 
	 * @param exception 异常信息
	 * @return IllegalArgumentException
	 */
	public static IllegalArgumentException exception(Exception e) {
		return new IllegalArgumentException(Threads.getInvokerAbbr() + "[" + e.getMessage() + "]",
				e);
	}

	/**
	 * 断言，直接抛出异常，信息会在原信息上加上类和方法名
	 * 
	 * @param message 异常信息
	 * @param e 异常类
	 * @return IllegalArgumentException
	 */
	public static IllegalArgumentException exception(String message, Exception e) {
		return new IllegalArgumentException(Threads.getInvokerAbbr() + message, e);
	}
}
